# python中的库 分为内置库和第三方库

# 一个简单例子 使用库中的方法
# 计算两个合法日期之间的时间间隔 直接使用库 简化开发
# 使用库的时候需要导入你想要使用的那个 import
# import datetime
# 导入的写法
# from datetime import datetime # 这种写法可以直接使用datetime对象
# import datetime as dt # 这种写法给导入的库起了一个别名

# datetime出现两次 因为在这个库中有一个对象就是datetime 这里先定义出datetime对象
# date1 = datetime.datetime(year = 2025, month = 10, day = 13)
# date2 = datetime.datetime(year = 2025, month = 11, day = 18)
# print(date2 - date1)
# date1 = datetime(year = 2025, month = 10, day = 13)
# date2 = datetime(year = 2025, month = 11, day = 18)
# print(date2 - date1)
# date1 = dt.datetime(year = 2025, month = 10, day = 13)
# date2 = dt.datetime(year = 2025, month = 11, day = 18)
# print(date2 - date1)

##########################################################################################
# 接下来使用python解决一些算法题


# 算法题 以空格为分割翻转字符串 每个单词不反转 若开始两个单词之间有多个空格则最终结果两个单词之间只能有一个空格
# def reverseWords(s : str):
#     tokens = s.split() # 这个split是str中内置的方法 将str中的单词以空格分割并且放在列表中
#     tokens.reverse() # 翻转列表中的单词 reverse是列表中的方法
#     return ' '.join(tokens) # 以空格为分割构建新的字符串 join是str中的方法

# print(reverseWords("I am a student."))


# 判断一个字符串旋转若干次之后能不能成为另一个给定的字符串
# 这段代码没有使用库 
# def rotateString(s, goal):
#     if len(s) != len(goal):
#         return False
#     return goal in (s + s) # in是python中的关键字 作用是判断一个字符串是不是另一个字符串的子串

# print(rotateString("abcde", "cdeab"))
# print(rotateString("abcde", "edcba"))


# 判断一些字符串是不是另一个字符串的前缀字符串
# def countPrefixes(words: list, s: str):
#     count = 0
#     for word in words:
#         if s.startswith(word):
#             # s 是以 word 开头
#             count += 1
#     return count

# print(countPrefixes(['a', 'b', 'c', 'ab', 'bc', 'abc'], 'abc'))
# print(countPrefixes(['a', 'a'], 'aa'))


##########################################################################################
# 实现文件查找工具
# 使用os库
# 使用os使用 os.walk 即可实现目录的递归遍历. 
# os.walk 返回一个三元组, 分别是 当前路径 , 当前路径下包含的目录名 (多个), 当前路径下包含的文件
# 名 (多个)

# import os
# import time
# inputPath = input('请输入要搜索的路径 : ')
# pattern = input('请输入要搜索的关键词 : ')

# for dirpath, dirnames, filenames in os.walk(inputPath):
#     print(f'要搜索的路径是 : {dirpath}')
#     print(f'该路径下的目录 : {dirnames}')
#     print(f'该路径下的文件 : {filenames}')
#     time.sleep(100)

# 根据关键字找指定目录下的文件
# for dirpath, dirnames, filenames in os.walk(inputPath):
#     for f in filenames:
#         if pattern in f:
#             print(f'找到了一个, {dirpath}/{f}')


##########################################################################################
# 第三方库 使用pip
# pip 是 Python 内置的 包管理器. 
# 所谓 包管理器 就类似于我们平时使用的手机 app 应用商店一样. 
# 第三方库有很多, 是不同的人, 不同的组织实现的. 为了方便大家整理, Python 官方提供了一个网站
# PyPI https://pypi.org/, 来收集第三方库. 
# 其他大佬写好的第三方库也会申请上传到 PyPI 上. 
# 这个时候就可以方便的使用 pip 工具来下载 PyPI 上的库了.

# pip install [库名] 使用这个来安装第三方库的中某一个库
# 之后直接使用import导入代码块之后就可以使用了


## 生成二维码
# 使用pip安装工具 pip install qrcode[pil]

# import qrcode

# img = qrcode.make('今天的天气冷冷的') # 生成的二维码中包含的内容
# img.save('qrcode.png') # 保存为png图片


## 使用python操作excel表格
# import xlrd
# # 1. 打开 xlsx 文件
# xlsx = xlrd.open_workbook('d:/test.xlsx')
# # 2. 获取 0 号标签页. (当前只有一个标签页)
# table = xlsx.sheet_by_index(0)
# # 3. 获取总行数
# nrows = table.nrows
# # 4. 遍历数据
# count = 0
# total = 0
# for i in range(1, nrows):
#     # 使用 cell_value(row, col) 获取到指定坐标单元格的值.
#     classId = table.cell_value(i, 1)
#     if classId == 101:
#         total += table.cell_value(i, 2)
#         count += 1
# print(f'平均分: {total / count}')


## 程序猿鼓励师
# 第三方库pynput 用于监听键盘按键. 注意版本不要用最新. playsound 用于播放音频
# 下载指令 pip install pynput==1.6.8 pip install playsound==1.2.2
# 使用 from import 的格式直接导入模块中的指定对象/函数. 
# 使用 keyboard.Listener 监听键盘按键. 其中 on_release 会在释放按键时被调用. 
# 使用 listener.start 启动监听器. 为了防止程序直接退出, 使用 listener.join 让程序等待用
# 户按键. 
# 使用 count 计数, 每隔 10 次, 调用 playsound 播放音频文件

from pynput import keyboard
from playsound import playsound

count = 0
def onRelease(key):
    print(key)
    global count
    count += 1
    if count % 20 == 0:
        playsound('sound\1.mp3')

listener = keyboard.Listener(on_release= onRelease)
listener.start()
listener.join()
# 这是一个代码测试 测试程序猿鼓励师 

# 改进代码 让播放音频在另一个线程中
from pynput import keyboard
from playsound import playsound
from threading import Thread
count = 0
def on_release(key):
    print(key)
    global count
    count += 1
    if count % 10 == 0:
        t = Thread(target=playsound, args=('ding.sound\1.mp3',))
        t.start()
        #playsound('ding.mp3')
listener = keyboard.Listener(on_release=on_release)
listener.start()
listener.join()